#include <iostream>
using namespace std;

int mark(int x) {
  cout << "mark(" << x << ")" << endl;
  return x;
}
// cout << (mark(x = 4 + 5), mark(x + 5)), mark(x + 25);

int main() {
  int x = 0;
  cout<<(x=4+5,x+5),x+25;
}
/*
逗号的优先级最低，比<<还低。上句相当于：
  (x=4+5,x+5)   # 加括号先求值
    x = 4 + 5   # 赋值表达式，求值结果为9，有副作用。
    (9, x + 5)  # 加括号先求值。逗号表达式值为最后一个表达式的值，14。
  cout << 14    # 输出14，有副作用，值为ostream&，就是cout。
  cout, x+25    # 值为34，没副作用，可以优化掉。

表达式最好没有副作用，或只有一处副作用。
语句则应当有副作用。
*/